package cn.yh.register.oss.service.impl;

import cn.yh.register.oss.service.FileService;
import cn.yh.register.oss.utils.ConstantOssPropertiesUtils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Service
public class FileServiceImpl implements FileService {

    /**
     * 文件上传到阿里云
     * @param file 文件对象
     * @return 文件的网络地址
     */
    @Override
    public String upload(MultipartFile file) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ConstantOssPropertiesUtils.EDNPOINT,
                ConstantOssPropertiesUtils.ACCESS_KEY_ID, ConstantOssPropertiesUtils.SECRECT);
        //文件名
        String filename = file.getOriginalFilename();
        if (filename != null) {
            try {
                //截取扩展名
                String ext = filename.substring(filename.lastIndexOf("."));
                //按照当前日期，创建文件夹，上传到创建文件夹里面
                //  2021/02/02/01.jpg
                String timeUrl = new DateTime().toString("yyyy/MM/dd");

                //文件重命名
                filename = timeUrl+"/"+ System.currentTimeMillis() + ext;
                // 创建PutObjectRequest对象。
                PutObjectRequest putObjectRequest = new PutObjectRequest(
                        ConstantOssPropertiesUtils.BUCKET, filename, file.getInputStream());
                // 创建PutObject请求。 上传的存储空间
                PutObjectResult result = ossClient.putObject(putObjectRequest);
                // 上传成功后，返回文件的网络地址。 存储空间名称                      地域节点
                return "Https://"+ConstantOssPropertiesUtils.BUCKET+"."+ConstantOssPropertiesUtils.EDNPOINT+
//                           文件名
                        "/"+filename;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}
